﻿using System;
using System.Collections.Generic;
using System.Text;

namespace QuestLib
{


    using VOID = IEnumerator<ICondition>;

    public enum REQUEST
    {
        CLICKNPC,
    }

    public enum RESULT
    {
        NONE,
        RETDIALOG,
    }


    public class  EvetArg
    {
        public int _eventType;
        public int _param;
        public int _ret;
    }


    public abstract class iQuest
    {
        public int _ID;

        public abstract VOID Run();

        VOID _FSM;


        public iQuest()
        {
            _FSM = Run();
        }

        ICondition _WaitCondition = null;


        public bool IsWaitEvent(EvetArg eventID)
        {
            if (_WaitCondition == null)
                return false;

            if (_WaitCondition.OnEvent(eventID) == true)
            {
                _Ret = _WaitCondition._nRet;

                return true;
            }

            return false;
        }


        public bool MoveNext()
        {


            if (_FSM.MoveNext() == true)
            {

                _WaitCondition = _FSM.Current;// 이벤트가 있다
                return true;
            }



            return false;
        }

        int _Ret;
        public int Ret()
        {
            return _Ret;
        }


    }

    //public class iEventState
    //{
    //    public uint _ID;

        

        

    //    //public abstract VOID OnStart();
    //    //public abstract VOID OnRun();
    //    //public abstract VOID OnEnd();

    //    protected uint _nRet;

    //    public uint Ret(){return _nRet;}

    //    enum EventState
    //    {
    //        START,
    //        RUN,
    //        END
    //    }



    //    public iEventState(VOID fsm)
    //    {
    //        _FSM = fsm;
    //    }
        

    //    //EventState _EventState; 

    //    //public void Start()
    //    //{
    //    //    _FSM = OnStart();
    //    //    //_EventState = EventState.START;

    //    //    RunState();

    //    //}



    //    public delegate VOID FSM();

    //    public FSM _NextState;



    //    //public ICondition Next(FSM NextState)
    //    //{
    //    //    _NextState = NextState;
    //    //    return new QuestLib.ICondition(QuestLib.EVENT.NONE, 0, 1);
    //    //}


    //    //public void DoEvent(EVENT gEvent , uint param1,uint param2)
    //    //{
    //    //    if (_FSM != null && _FSM.Current != null)
    //    //    {
    //    //        if (_FSM.Current._event == gEvent && _FSM.Current._param == param1)
    //    //        {
    //    //            _nRet = param2;
    //    //            RunState();
    //    //        }
    //    //    }

    //    //}

    //    public RESULT RunState( )
    //    {
            
    //        //if(_FSM.Current != null)
    //        //{
    //        //    _FSM.Current._nRet = ret;
    //        //}



    //        if (_FSM.MoveNext() == true)
    //        {

    //            return _FSM.Current._result;// 이벤트가 있다
    //        }

    //        return RESULT.NONE;

    //    }

        



    //}

}
